package cn.joeg.app.web.db.util;


import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

@Component
public class DBUtil {

    @Autowired
    private DBCommon dbCommon;


    private static final Logger logger = LoggerFactory.getLogger(DBCommon.class);

    public List<Map<String, Object>> executeQuery(String sql) {
        try {
            return dbCommon.query(sql);
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public long psQueryCounts(String sql) {
        try {
            List<Map<String, Object>> query = dbCommon.query(sql);
            return query.size();
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
            return 0;
        }
    }

    public List<Map<String, Object>> psQuery(String sql, Object[] p) {
        try {
            return dbCommon.query(sql, p);
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return null;
    }

    public int executeUpdate(String sql) {
        try {
            return dbCommon.update(sql);
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return 0;
    }

    public int executeUpdate(String sql, final Object... params) {
        try {
            return dbCommon.update(sql, params);
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return 0;
    }


    public long executeUpdateGetId(String sql) {
        try {
            Object o = dbCommon.insertAndReturnKey(sql);
            if (o != null) {
                return NumberUtils.toLong(o + "");
            }
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return -1L;
    }


    public int psUpdate(final String sql, final Object[] p) {
        try {
            return dbCommon.update(sql, p);
        } catch (SQLException e) {
            logger.error(e.getMessage(), e);
        }
        return 0;
    }


}
